<html>
  <head>
    <title>PrettyProlog applet</title>
    <style type="text/css">
      <!--
      div#container { width: 800px; margin: 0 auto; text-align: left;
                      background-color:#ffffff; }
      body { text-align: center; }
      #applet { border: solid 1px #000000;
                width: 780px; height: 580px; }
      -->
    </style>
  </head>
  <body>
   <div id="container">
    <center>
      <div id="applet">
        <applet width="780" height="580"
                code="prettyprolog.gui.PrettyPrologApplet"
                archive="../../bin/PrettyProlog.jar">
        </applet>
      </div>
    </center>
    <br /><br />
    You can see the applet contains various panels. On the right you have the Theory panel, that shows the current Theory. When PrettyProlog starts, this panel is empty. To load a theory, use the File&gt;Load theory menu item. Since an applet can't read files on your local machine for security reasons, you will get a window where you can type your theory, or paste it from another program. Once you have loaded a theory, you can solve goals typing them into the big input field in the lower part of the applet and pressing Enter or clicking Solve. If the step-by-step mode is enabled, you will have to press Enter again, or click Continue, every time a frame is pushed or popped on/off the stack. Else, PrettyProlog's engine will allow you to Continue only after it has found a solution to your goal. Also, every time you can Continue, you can also Stop solving using the appropriate button.<br />
	If your goal contains free variables, you'll be able to Continue until there are no more substitutions that make your goal true. If the goal is ground, though, as soon as a solution is found the solving process is stopped. Usually this has no visible effects, but try to put calls to e.g. write() in your clauses and see what happens...<br />
	The other panels are the Stack viewer, where you can inspect frames ont he Stack to see what they contain, i.e.
<ul>
  <li>the Goal that still had to be solved at the time the Frame was pushed on the stack;</li>
  <li>the substitution that is the partial solution to such Goal at this point;</li>
  <li>the Clause that has been used to obtain the Goal;</li>
  <li>the index from where, on backtracking, the Engine will search for the next Clause,</li>
</ul>
and the SLD tree viewer, which shows as a tree the series of steps the engine has performed. Each branch represents the selection of a Clause from the theory, while leaves are either solutions or dead ends, i.e. goals that couldn't be solved. Near each node there's the Substitution that was valid at that point. Also, the SLD tree shows which frames are removed from the stack as the effect of a cut, by printing them with a different font and icon.
   </div>
  </body>
</html>